from lxml import etree

if __name__ == '__main__':
    # 对于 HTML 文件来说，如果不明确指定解析器，可能会报错
    root = etree.parse(source="hello.html", parser=etree.HTMLParser())
    # print(etree.tostring(root, pretty_print=True))

    # # 查找所有的 li 元素
    # items = root.xpath("//li")
    # for item in items:
    #     print(etree.tostring(item, pretty_print=True))

    # # 获取所有的 li 元素 class 属性的值
    # attributes = root.xpath("//li/@class")
    #
    # for attribute in attributes:
    #     print(attribute)
    #
    # 获取所有的 li 元素 class 属性为 item-0 的元素
    # /html/body/div/ul/li[1]
    # attributes = root.xpath("//li[@class='item-0']")
    #     # for attribute in attributes:
    #     #     print(etree.tostring(attribute, pretty_print=True))

    # # 获取第 n 个 li 元素,在 XPath 中编号是从 1 开始的
    # item = root.xpath("//li[1]")
    # print(etree.tostring(item[0], pretty_print=True))

    # 获取前 n 个li 元素
    # items = root.xpath("//li[position()<3]")
    # for item in items:
    #     print(etree.tostring(item, pretty_print=True))

    # # 获取最后一个 li 元素
    # items = root.xpath("//li[last()]")
    # print(etree.tostring(items[0], pretty_print=True))

    # # 获取倒数第 2 个 li 元素
    # items = root.xpath("//li[last()-1]")
    # print(etree.tostring(items[0], pretty_print=True))

    # # 获取最后 2 个 li 元素
    # items = root.xpath("//li[position() >last()-2]")
    # for item in items:
    #     print(etree.tostring(item, pretty_print=True))

    # 获取 元素 中的文本
    text = root.xpath("//li[1]/a/text()")
    print(text)


